package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.Seat;
import com.example.dto.SeatAddDTO;
import com.example.dto.SeatUpdateDTO;
import com.example.util.Result;


import java.sql.Time;
import java.util.List;
import java.util.Date;

/**
* @author HP
* @description 针对表【seat】的数据库操作Service
* @createDate 2025-08-18 19:33:19
*/
public interface SeatService extends IService<Seat> {

    /**
     * 添加座位
     * @param seatAddDTO 座位信息
     * @return 是否添加成功
     */
    Result addSeat(SeatAddDTO seatAddDTO);

    /**
     * 更新座位
     * @param seatUpdateDTO 座位信息
     * @return 是否更新成功
     */
    Result updateSeat(SeatUpdateDTO seatUpdateDTO);

    /**
     * 删除座位
     * @param id 座位ID
     * @return 是否删除成功
     */
    Result deleteSeat(Long id);

    /**
     * 根据房间ID查询座位
     * @param roomId 房间ID
     * @return 座位列表
     */
    Result getSeatsByRoomId(Long roomId);

    /**
     * 查询可用座位
     * @param roomId 房间ID（可选，为null时查询所有）
     * @return 可用座位列表
     */
    Result getAvailableSeats(Long roomId);

    List<Seat> getAvailableSeats();

    /**
     * 预约座位
     * @param userId 用户ID
     * @param seatId 座位ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 是否预约成功
     */
    boolean reserveSeat(Long userId, Long seatId, Time startTime, Time endTime);

    /**
     * 取消预约
     * @param reservationId 预约ID
     * @return 是否取消成功
     */
    boolean cancelReservation(Long reservationId);

    /**
     * 查询用户的座位预约
     * @param userId 用户ID
     * @return 预约列表
     */
    List<Seat> getUserReservations(Long userId);
}
